二进制的详细讲解
------------恢复内容开始------------
------------恢复内容开始------------
进制的转换
十进制转相应进制
(十进制)231 转 八进制 除八取余法 从下而上取余
231/8=28 ....7
28/8=3.......4
3/8=0........3
(十进制)231=(八进制)0o347
(十进制)231 转 16进制 除十六取余法 从下而上取余
231/16=14......7
14/16=0..........14
(十进制) 231=(十六进制)0xe7
(十进制)231.3 转 16进制 (*)小数部分 乘十六取整法 从上而下取整
0.3*16=0.48............0
0.48*16=7.68..........7
0.68*16=10.88........10
0.88*16=14.08........14
0.08*16=1.28..........1
0.28*16=4.48 .........4
(十进制)231.3=(十六进制)0xe7.07ae14
相应进制转十进制
(八进制)0o27.43转 十进制
7*8^0+2*8^1=(八进制)23
4*8^-1+3*8^-2=35/64=0.546875
0o27.43=(十进制)23.546875
(十六进制)0o27.43转 十进制(同上)
。。。。。。。。
进制换算补充
在进行十转二,八,十六进制小数点换算时,不管怎么乘二,八或十六,结果小数部分始终不为零时,分别有一舍二入,三舍四入,七舍八入对应操作
八进制直接转十六进制或者十六转八,只有通过二进制,或十进制中间过渡,没有捷径,如果哪位大神有直接转换的方法欢迎告知
二进制的原码,反码,补码
正数的原码,反码,补码
24=(二进制)00....00011000
原码:00....00011000
反码:00....00011000
补码:00....00011000
负数的原码,反码,补码
-24=(二进制)1000....00011000
原码:1000.....00011000
反码:11111....11100111
补码:1000.....11101000 (反码加一)
二进制的运算
计算机对数字的加减运算都是用补码
-23(原码):1000.....00010111
-23(反码):1111......11101000
-23(补码):1111......11101001
12(原码):0000.....00001100
12(反码):0000.....00001100
12(补码):0000.....00001100
12(补码)0000.....00001100(补码相加时,高位也就是符号位也要运算进来)
-23(补码)1111......11101001
` -23(补码)+12(补码)=1111......11110101(结果如果是负数,也就是高位是1,取反加一)
(结果取反加一)1000......00001011= -23+12=-11
&(与),^(异或),|(或) ,~(按位取反) (*)
&(与)(1&1=1,1&0=0,0&0=0)
101010001
1101 00111
=100000001
^(异或)(1^1=0,0^0=0,0^1=1)
101010001
1101 00111
=01111 0110
|(或)(1|0=1,1|1=1,0|0=0)
101010001
1101 00111
=11111 0110
~(按位取反)对补码进行取反,取反结果为负,进行反码加一
-12
原码:100........1100
反码:111.........0011
补码:111.........0100
取反:000.........1011=11
12
原码:000........1100
反码:000........1100
补码:000........1100
取反:111.........0011 结果负数,反码加一
100........1101=-13
1
原码:000........0001
反码:000.........0001
补码:000.........0001
取反:111.........1110
100..........0010=-2
-1
原码:100........0001
反码:111.........1110
补码:111.........1111
取反:000.........0000=0
位移算数左移<<,算数右移>>,逻辑右移>>>(全都是补码进行的位移)
5>>2=1
(补码)00..0101>>2=00..0001
-5>>2=-2
10..0101
(补码)11..1010+1=11..1011
11..1011>>2=1111..1110(为负数,要反码+1)
1000..0001+1=1000..0010=-2
5>>>2=1(和算数位移结果一样)
(补码)00..0101>>2=00..0001
-5>>>2=1073741822
10..0101
(补码)11..1010+1=11..1011
11..1011>>>2=0011..1110(逻辑右移,高位始终补零,所以不用反码补一,结果就是一个很大的整数)
------------恢复内容结束------------
------------恢复内容结束------------